SPSS 操作符和函数快速概览

作者:Ruben Geert van den Berg,发表于 SPSS Blog

下表提供了 SPSS 中函数和操作符的快速概览,按类型(数值型、字符串型等)排序。 表格下方详细介绍了某些不太常见的函数,并提供了示例。

类型 函数 描述 示例
比较 = (或 EQ) 等于 if(var01 = 0) var02 = 1.
比较 <> (或 NE) 不等于 if(var01 <> 0) var02 = 1.
比较 < (或 LT) 小于 if(var01 < 0) var02 = 1.
比较 <= (或 LE) 至多 if(var01 <= 0) var02 = 1.
比较 > (或 GT) 大于 if(var01 > 0) var02 = 1.
比较 >= (或 GE) 至少 if(var01 >= 0) var02 = 1.
比较 RANGE 在范围内 if(range(score,0,20)) grp01 = 1.
比较 ANY 第一个值是否在第二个、第三个…值之中? if(any(nation,1,3,5)) flag01 = 1.
逻辑 & (或 AND) 所有参数都为真? if(sex = 0 & score >= 100) grp01 = 1.
逻辑 | (或 OR) 至少 1 个参数为真? if(sex = 0 | score <= 90) grp01 = 1.
逻辑 NOT 参数不为真 select if(not(missing(score))).
数值型 + 加法 compute sum01 = var01 + var02.
数值型 - 减法 compute dif01 = var01 - var02.
数值型 * 乘法 compute revenue = sales * price.
数值型 / 除法 compute avg01 = sum01 / trials.
数值型 ** 幂运算 compute square01 = var01**2.
数值型 SQRT 平方根 compute root01 = sqrt(var01).
数值型 RND 四舍五入 compute score = rnd(reactime).
数值型 MOD 取模函数 (Modulo Function) compute cntr = mod(id,4).
数值型 TRUNC 截断 compute score = trunc(reactime).
数值型 ABS 绝对值 compute abs01 = abs(score).
数值型 EXP 指数函数 (Exponential Function) compute escore = exp(score).
数值型 LN 自然对数 compute lnscore = ln(score).
统计 MIN 变量中的最小值 compute min01 = min(var01 to var10).
统计 MAX 变量中的最大值 compute max01 = max(var01 to var10).
统计 SUM 变量之和 compute total = sum(var01 to var10).
统计 MEAN 变量的平均值 compute m01 = mean(var01 to var10).
统计 MEDIAN 变量的中位数 compute me01 = median(var01 to var10).
统计 VARIANCE 变量的方差 compute vnc01 = variance(var01 to var10).
统计 SD 变量的标准差 compute sd01 = sd(var01 to var10).
缺失值 MISSING 系统或用户缺失值 select if(missing(score)).
缺失值 SYSMIS 系统缺失值 select if(not(sysmis(score))).
缺失值 NMISS 变量中缺失值的数量 compute mis01 = nmiss(v01 to v10).
缺失值 NVALID 变量中有效值的数量 compute val01 = nvalid(v01 to v10).
字符串型 LOWER 转换为小写 compute sku = lower(sku).
字符串型 UPCASE 转换为大写 compute sku = upcase(sku).
字符串型 CHAR.LENGTH 字符串中的字符数 compute len01 = char.length(firstname).
字符串型 CHAR.INDEX 子字符串首次出现的位置 compute pos01 = char.index('banana','a').
字符串型 CHAR.RINDEX 子字符串最后一次出现的位置 compute pos02 = char.rindex('banana','a').
字符串型 CHAR.SUBSTR 提取子字符串 compute firstchar = char.substr(name,1,1).
字符串型 CONCAT 连接字符串 compute name = concat(fname,' ',lname).
字符串型 REPLACE 替换子字符串 compute str01 = replace('dog','g','t').
字符串型 RTRIM 删除字符串右侧的空格 compute str02 = rtrim(str02).
字符串型 LTRIM 删除字符串左侧的空格 compute str03 = ltrim(str03).
日期 DATE.DMY 将日、月、年转换为日期 compute mydate = date.dmy(31,1,2024).
日期 DATEDIFF 计算日期之间的时间差(以选择的时间单位为准) compute age = datediff(datevar02,datevar01,'years').
日期 DATESUM 向日期添加时间单位 compute followup = datesum(datevar01,100,'days').
日期 XDATE 从日期中提取日期组成部分 compute byear = xdate.year(bdate).
时间 TIME.HMS 将时、分、秒转换为时间 compute time01 = time.hms(17,45,12).
分布 CDF 累积概率分布或密度函数 compute pvalue = cdf.normal(-1.96,0,1).
分布 IDF 逆概率分布或密度函数 compute zvalue95 = idf.normal(.025,0,1).
分布 PDF 概率分布或密度函数 compute prob = pdf.binom(0,10,.5).
分布 RV 从指定的概率分布或密度函数中抽取(伪)随机数 compute rand01 = rv.uniform(0,1).
其他 LAG 从前一个个案中检索值 compute prev = lag(varname).
其他 NUMBER 将字符串转换为数值 compute nvar = number(svar,f3).
其他 STRING 将数值转换为字符串 compute svar = string(nvar,f3).
其他 VALUELABEL 将值标签设置为字符串值 compute svar = valuelabel(nvar).

SPSS ANY 函数示例

SPSS 中,ANY 函数评估第一个值是否在第二个、第三个…值之中。 例如,假设我们想知道完成日期是否是星期一、星期三 星期五? 我们 可以 使用 if(cday = 2 or cday = 4 or cday = 6) flag01 = 1.。 然而,这里一个很好的简写方法是 if(any(cday,2,4,6)) flag01 = 1.。 下面的屏幕截图显示了在 spss-functions.sav 上运行的结果。

SPSS Any Function Example IF(ANY(CDAY,2,4,6)) FLAG01 = 1. 的结果。

作为第二个例子,让我们标记所有在最后 5 个变量中至少得一个 1 分的个案。 这通常通过 COUNT 然后 RECODE 来完成,但一个更短的选择是 if(any(1,q1 to q5)) flag02 = 1.,它检查 1 是否在 变量 q1 到 q5 中。

SPSS RND 函数示例

在 SPSS 中,您可以将值 x 四舍五入到某个常数 c,默认情况下 c 为 1。 像这样,

  • RND(123456.789) = 123457
  • RND(123456.789,10) = 123460 并且
  • RND(123456.789,.1) = 123456.8.

因此,要将工资四舍五入到美元,您可以使用 compute salary = rnd(salary).。 或者,使用 compute salary = rnd(salary, **.01** ). 将工资四舍五入到美元 。 要将工资四舍五入到 美元,请使用 compute salary = rnd(salary, **1000** ).,如下面的在 spss-functions.sav 上运行的结果所示。

SPSS Round Numbers Example COMPUTE SALARY = RND(SALARY,1000). 的结果。

SPSS MOD 函数示例

在 SPSS 中,MOD取模函数 (modulo function) 的缩写,其中 MOD(X,Y) 返回 X 减去 Y 尽可能多次后的余数。 如果每个受访者都有相同数量的试验,这对于创建试验计数器非常方便,如 compute trial = mod(($casenum - 1),4) + 1. 中所示。 在 spss-functions.sav 上运行时,结果如下所示。

SPSS Mod Function Example 通过 COMPUTE TRIAL = MOD(($CASENUM - 1),4) + 1. 创建的试验计数器。

SPSS TRUNC 函数示例

在 SPSS 中,您可以将值 x 截断(“向下舍入”)到某个常数 c,默认情况下 c 为 1。 像这样,

  • TRUNC(123456.789) = 123456
  • TRUNC(123456.789,10) = 123450 并且
  • TRUNC(123456.789,.1) = 123456.7.

如果每个受访者都有相同数量的试验,则 TRUNC 在创建受访者标识符时非常方便,如 compute respid = trunc(($casenum - 1) / 4) + 1. 中所示。 下面显示了在 spss-functions.sav 上运行的结果。

SPSS Trunc Example COMPUTE RESPID = TRUNC(($CASENUM - 1) / 4) + 1. 的结果。

SPSS MEAN 函数示例

在 SPSS 中,MEAN 非常简单明了,但有两件事你应该知道:首先,如果存在任何 缺失值 (missing values),那么

\[mean = \frac{sum(valid\;values)}{number\;of\;valid\;values}\]

这一点很重要,因为有效值的数量可能因受访者而异。

其次,您可以使用 MEAN._k_(...)MEAN 限制为最小数量的有效值 k。 因此,对于 spss-functions.savcompute m01 = mean.5(q1 to q5). 仅计算在这些 5 个变量上没有任何缺失值的个案的平均分数,如下所示。

SPSS Compute Means With Missing Values COMPUTE M01 = MEAN.5(Q1 TO Q5). 的结果。

SPSS SD 函数示例

在 SPSS 中,SD 计算变量的标准差。 它具有与 MEAN 讨论的相同属性。 SD 在检测 “直线答题者 (straightliners)”(对所有或大多数问题给出相同答案的受访者)时非常方便。 像这样,compute sd01 = sd(q1 to q5). 可以快速完成 spss-functions.sav 的工作。

SPSS Sd Function Example 使用 COMPUTE SD01 = SD(Q1 TO Q5). 检测直线答题者。

SPSS CDF 函数示例

CDFc umulative (probability) d ensity (or distribution) f unction 的缩写:它返回 \[P(X \le x)\],
给定一些 概率密度函数 (probability density function)。 例如,假设 z 服从标准正态分布,z = -2.0 的双尾 p 值是多少? 我们可以通过运行 compute pvalue = 2 * cdf.normal(-2,0,1). 来找到答案,如下所示。

SPSS Compute Pvalue

SPSS IDF 函数示例

IDFi nverse (probability) d ensity (or distribution) f unction 的缩写:它返回某个选定概率的临界值,给定一个密度函数。 请注意,这正是我们计算 置信区间 (confidence intervals) 时所做的事情。 例如:哪个 z 值具有 .025 的累积概率? 我们可以通过 compute zcrit = idf.normal(.025,0,1). 来计算,如下所示。

SPSS Compute Critical Value

SPSS NUMBER 函数示例

在 SPSS 中,NUMBER字符串变量 (string variable) 转换为(新的)数值变量。 关于 spss-functions.savcompute nage = number(age,f2). 基于包含年龄的字符串变量创建一个数值年龄变量。

SPSS Number Function Example COMPUTE NAGE = NUMBER(AGE,F2). 的结果。 请注意案例 11 的非法字符。

重要的是,选择 f2 格式会导致 SPSS 忽略除前 2 个字符以外的所有字符。 如果我们选择 f3 代替,如 compute nage = number(age, **f3** ). 中所示,那么 SPSS 会抛出以下警告:

Warning # 1102
An invalid numeric field has been found. The result has been set to the
system-missing value.
Command line: 117 Current case: 11 Current splitfile group: 1
Field contents: ‘27a’

这是因为案例 11 的年龄包含非法字符,导致系统缺失值。 可悲的是,当使用 ALTER TYPE 转换此变量时,此值会从您的数据中消失,没有任何警告或错误。 在我们看来,这确实是 SPSS 中的一个主要愚蠢之处,而且确实非常棘手。

SPSS VALUELABEL 函数示例

VALUELABEL 函数将某个变量的值标签设置为某个字符串变量的值。 下面的语法说明了如何为 spss-functions.sav 执行此操作。

***DECLARE NEW STRING VARIABLE WITH LENGTH 10.
** string sday(a10).

***SET VALUE LABELS FOR CDAY AS VALUES.
** compute sday = valuelabel(cday).
execute.

结果

SPSS Valuelabel Function Result COMPUTE SDAY = VALUELABEL(CDAY). 的结果。

最终说明

现在老实说,我们对 SPSS 操作符和函数的概述并非 100% 全面。 我确实省略了一些非常罕见的示例,以至于涵盖它们只会使表格混乱,而不会帮助任何人。

如果您有任何问题或意见,请在下面留言。 除此之外:

感谢阅读!